combobox: Make combo box activatable
authorMaximiliano Sandoval R <msandova@gnome.org>
Fri, 10 Sep 2021 13:42:15 +0000 (15:42 +0200)
committerMaximiliano Sandoval R <msandova@gnome.org>
Wed, 3 Nov 2021 23:46:47 +0000 (00:46 +0100)
The activation is simply forwarded to the button
within.

gtk/gtkcombobox.c
gtk/gtkcombobox.h

index 70d0f637a3cb94e08db8f5a81b042c67362ca225..f007d841f9732f26e19922c0d04ab1cc9375c531 100644 (file)
@@ -172,6 +172,7 @@ typedef struct
  */
 
 enum {
+  ACTIVATE,
   CHANGED,
   MOVE_ACTIVE,
   POPUP,
@@ -346,6 +347,14 @@ gtk_combo_box_measure (GtkWidget      *widget,
                       minimum_baseline, natural_baseline);
 }
 
+static void
+gtk_combo_box_activate (GtkComboBox *combo_box)
+{
+  GtkComboBoxPrivate *priv = gtk_combo_box_get_instance_private (combo_box);
+
+  gtk_widget_activate (priv->button);
+}
+
 static void
 gtk_combo_box_size_allocate (GtkWidget *widget,
                              int        width,
@@ -419,9 +428,32 @@ gtk_combo_box_class_init (GtkComboBoxClass *klass)
   object_class->set_property = gtk_combo_box_set_property;
   object_class->get_property = gtk_combo_box_get_property;
 
+  klass->activate = gtk_combo_box_activate;
   klass->format_entry_text = gtk_combo_box_format_entry_text;
 
   /* signals */
+  /**
+   * GtkComboBox::activate:
+   * @widget: the object which received the signal.
+   *
+   * Emitted to when the combo box is activated.
+   *
+   * The `::activate` signal on `GtkComboBox` is an action signal and
+   * emitting it causes the combo box to pop up its dropdown.
+   *
+   * Since: 4.6
+   */
+  combo_box_signals[ACTIVATE] =
+      g_signal_new (I_ ("activate"),
+                    G_OBJECT_CLASS_TYPE (object_class),
+                    G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
+                    G_STRUCT_OFFSET (GtkComboBoxClass, activate),
+                    NULL, NULL,
+                    NULL,
+                    G_TYPE_NONE, 0);
+
+  gtk_widget_class_set_activate_signal (widget_class, combo_box_signals[ACTIVATE]);
+
   /**
    * GtkComboBox::changed:
    * @widget: the object which received the signal
index 9631e2043e783e2b4145648b769ecdf7ad0d0ee5..fde7e896531d93f94f909d4015cf09e50af69d8b 100644 (file)
@@ -60,10 +60,11 @@ struct _GtkComboBoxClass
   void     (* changed)           (GtkComboBox *combo_box);
   char    *(* format_entry_text) (GtkComboBox *combo_box,
                                   const char *path);
+  void     (* activate)          (GtkComboBox *combo_box);
 
   /*< private >*/
 
-  gpointer padding[8];
+  gpointer padding[7];
 };